package com.zhuzg.domain;

import lombok.Data;

/**
 *  统一返回数据
 *
 * 1. 为什么要使用泛型？
 *  为了编码安全。由于在定义的时候已经指定了类型，如果使用了错误类型参数会在编译的时候报错，
 *  这样对于开发人员来讲 是安全的，不容易犯错。
 *  事实上，在编译之后，JVM会进行泛型擦除。
 * @param <T>
 */
@Data
public class AjaxResult<T> {
    String code; // 200  正常
    T data;// 返回的数据
    String message;// 错误信息


    /**
     *  正常返回的
     * @param data
     */
    public AjaxResult(T data) {
        this.code = "200";
        this.data = data;
        this.message = "";
    }

    /**
     * 错误的返回
     * @param code
     * @param message
     */
    public AjaxResult(String code,String message) {
        this.code = code;
        this.data = null;
        this.message = message;
    }


    public  static<T> AjaxResult Ok(T  o){
        return  new AjaxResult<T>(o);
    }

    public  static AjaxResult error(String code,String msg){
        return  new AjaxResult(code,msg);
    }

    public  static AjaxResult error(String code,String msg,Object data){
        AjaxResult result = new AjaxResult(code, msg);
        result.setData(data);
        return result;
    }

}
